Volver a commit anterior y mantener cambios

Descripcion

Como volver a un commit anterior pero dejando los cambios de los commits posteriores como pendientes de commit.

Metodo

Se puede dar la situación en la que hayamos hecho un commit pero queremos volver atras porque nos hemos equivocado al hacer el commit y no queremos hacer un nuevo commit si no que queremos modificar el commit que hemos hecho mal sin perder la información de dicho commit

En eses casos no nos valdría hacer un checkout a commits anteriores, ni un revert, ya que perderíamos la información, en estas situaciones tenemos que utilizar el siguiente comando:

git reset --soft <COMMIT>

Con este comando volveremos al commit que hemos indicado en el comando, pero los cambios producidos por los commits posteriores a ese no se borrarán, sino que se mostrarán en el commit actual como cambios pendientes de comitear, lo que nos permitirá hacer un nuevo commit sin perder la información.

NOTA: esto solo debemos de hacerlo en local, si ya hemos subido un commit a un repositorio remoto no es aconsejable hacer este tipo de operaciones, ya que pueden resultar en dejar el repositorio en un estado inconsistente (sobre todo cuando trabajamos con varias personas sobre un repositorio)

Ejemplo

En este ejemplo hemos hecho dos commits (los dos ultimos), en los que hemos añadido un nuevo archivo y despues lo hemos modificado, queremos volver al commit "primer commit" pero no queremos perder la información de estos dos nuevos commits, ejecutamos el siguiente comando:

git reset --soft e5f6c7dc6822cf3420fc95f4f1a1777b711db8b6

Despues de ejecutar el comando estamos en esta situación:

Hemos vuelto al commit indicado, pero no solo eso, si hacemos un git status o un git diff HEAD vemos que los cambios de los dos ultimos commits siguen estándo pero como pendientes de comitear:

De manera que podemos volver a realizar los commits sobre esta información.

Tags

Git | reset | soft